組織単位(OU)を CloudFormation で更新した際の動作を確認してみた
こんにちは、大前です。
先日のアップデートで、Organizations の組織単位(OU)を CloudFormation で管理できる様になりました。
上記アップデートを利用して CloudFormation で管理している OU に対して更新を行った際にどういった動作になるのか、また Control Tower に取り込んでいる OU へ影響はあるのか、などを調べてみましたので、ブログに残したいと思います。
先にまとめ
- CloudFormation で管理できるパラメータは、OU 名 / 親 OU / タグ の 3つ
- 親 OU を更新する場合は OU の再作成が発生する
- 子アカウントなどが存在すると失敗
- 削除 → 再作成 となるため、Control Tower への登録状況も解除される
- OU 名とタグについては、置換なしで更新可能
- CloudFormation にて作成した OU を Control Tower に取り込む場合はコンソール等で別途作業が必要
やってみた
CloudFormation で OU を新規作成する
まずは以下の CloudFormation テンプレートを利用し、OU を新規作成してみます。ParentId に指定している r-xxxxx
は Root を示しています。
AWSTemplateFormatVersion: "2010-09-09" Description: "Create OU" Resources: Ou01: Type: AWS::Organizations::OrganizationalUnit Properties: Name: TestOU_01 ParentId: r-xxxxx Tags: - Key: Name Value: TestOU_01
CloudFormation のスタックを作成すると、以下の様に Root 直下に OU が作成されたことが確認できます。
Control Tower 側でも作成した OU が確認できます。あくまで Organizations 側のリソースとして OU を作成しているので、Control Tower には未登録の状態となります。
動作確認のため、作成した OU の配下にアカウントを 1つ新規作成しておきます。
CloudFormation で作成した OU を Control Tower に登録してみる
作成した OU を Control Tower に登録してみます。
少し待機し、OU が問題なく Control Tower に登録されました。CloudFormation で作成した OU でも問題なく Control Tower に登録できることがわかりました。
Control Tower 登録済みの OU の 親OU を CloudFormation から変更してみる
作成した OU が Control Tower に登録されている状態で、以下の様に CloudFormation テンプレートを更新し、変更セットを作成してみます。ParentId に OU を移動させたい OU の ID を指定する様にしています。
AWSTemplateFormatVersion: "2010-09-09" Description: "Create OU" Resources: Ou01: Type: AWS::Organizations::OrganizationalUnit Properties: Name: TestOU_01 ParentId: ou-xxxx-xxxx #ここを変更 Tags: - Key: Name Value: TestOU_01
変更セットを作成したところ、"置換" が True になっていることが確認できます。
上記の変更セットについて実行まで行うと、下記のようにスタック更新が失敗しました。エラーメッセージと、変更セット作成画面で "置換" が True になっていたことからも、OU を再作成しようとして失敗している様に見えます。
子アカウントがない OU を用意し、親OU の更新を行ってみる
もう少し動作を確認するため、子アカウントのない OU を 2つ、先ほどと同様に CloudFormation を利用して作成しました。また、片方は Control Tower に登録しておきます。(画像内の TestOU_02 が Control Tower に登録した OU)
この状態で、先ほどと同様に ParentId を更新するテンプレートで変更セットを作成したところ、両方とも "置換" が True となりました。子アカウントの有無や Control Tower への登録状況に関わらず、親OU を変更しようとすると OU の再作成が発生する様です。
子アカウントがないため、上記変更セットは無事更新が実行できました。スタックの更新後に OU を確認すると、共に Control Tower の登録状況が "未登録" に戻っていました。これは OU 自体を再作成したため、Control Tower の登録状況もリセットされた、ということで良さそうです。
OU名やタグを更新してみる
親OU ではなく、OU名とタグを更新するようなテンプレートで変更セットを作成してみたところ、"置換" は False であることが確認できました。OU名やタグの更新であれば OU の再作成なしで更新がかけられる様です。
再作成が発生しないため、変更セットを利用してスタックを更新しても、Control Tower への登録状況はそのままでした。
おわりに
CloudFormation で OU を管理する場合に、OU に対する更新を実施した場合の動作について調べてみました。
CloudFormation を使えば OU の移動なども良い感じにできるのでは、と淡い期待を抱いていたりしましたが、動作的には再作成となる様なので、後から OU の階層を変更するような用途にはあまり使えなさそうです。
今回のアップデートで OU の管理を CloudFormation で実施しようとされている方がいるかもしれませんので、少しでもお役に立てば幸いです。
以上、AWS 事業本部の大前でした。